package com.cskaoyan.javse.oop2._1extends._10final._2method;

/**
 * final修饰方法后,表示最终的方法,最后的方法,即不能被重写的方法,但是它仍然可以被继承
 * 语法:
 *  [访问权限修饰符] final 返回值类型 方法名(形参列表){
 *      // 方法体
 *  }
 *  什么样的方法需要声明为final呢?
 *  如果你觉得你的方法已经足够🐮X了,功能很强大,很完善了,不需要被重写了,那就声明为final
 *  当然即便它不完善,我觉得你要么用,要么你自己写一个实现,也可以将方法声明为final
 *  当然实际开发中,这种需求还是很少见的。比较多见的是，假如重写方法，可能会导致错误的时候，才声明为final。
 *  在jdk当中，比较常见的final方法，就是Object当中getClass和所有和线程相关的方法
 *
 *  细节问题：
 *      有些方法是不能用final修饰的：
 *          构造方法
 *      有些方法用final修饰没有意义：
 *          static方法
 *          private方法
 *          它们本身就不能重写，所以加了没有意义
 *
 * @since 15:16
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        new Student().test();
    }
}

class Person {
    public final void test(){
        System.out.println("Person");
    }
    public final void eat(){
        System.out.println("是人就该吃饭");
    }

    // 'static' method declared 'final'
    public final static void test2(){}
    private final void test3(){}

    public  Person() {
    }
}

class Student extends Person {
    /*@Override
    public void test() {
        System.out.println("Student");
    }*/
}